package Negocios;

import Gestores.DtoObjects.TituloProvisionNacionalDTO;
import Gestores.Entidades.EntidadTituloProvisionNacional;
import Gestores.Factory.FactoryClass;
import java.sql.Date;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

public class TituloProvisionNacionalNegocio {

    private TituloProvisionNacionalDTO gestorTPN;

    public TituloProvisionNacionalNegocio() {
        gestorTPN = FactoryClass.getTituloProvisionNacionalInstance();
    }

    public ArrayList<Object> buscarPorNumero(int numero) throws Exception {
        if (numero <= 0) {
            throw new Exception("El NUMERO especificado no es valido.");
        } else {
            return gestorTPN.buscarPorNumero(numero);
        }
    }

    public ArrayList<Object> buscarPorId(String idAfiliado) throws Exception {
        if (idAfiliado == null) {
            throw new Exception("El IDAFILIADO especificado no es valido para la busqueda de TPN.");
        } else {
            return gestorTPN.buscarPorId(idAfiliado);
        }
    }

    public ArrayList<Object> buscarPorFecha(Date fecha) throws Exception {
        if (fecha == null) {
            throw new Exception("La FECHA especificada es nula para realizar la Busqueda de TPN.");
        } else {
            return gestorTPN.buscarPorFecha(fecha);
        }
    }

    public void insertar(EntidadTituloProvisionNacional etpn) throws Exception {
        if (validarInsercion(etpn)) {
            gestorTPN.insertar(etpn);
        } else {
            throw new Exception("La entidad tiene ausencia de datos para la Insercion.");
        }
    }

    public void actualizar(String idAfiliado, EntidadTituloProvisionNacional etpn) throws Exception {
        if ((idAfiliado != null) && (!validarActualizacion(etpn))) {
            throw new Exception("La ENTIDAD o el IDAFILIADO especificado están ausentes.");
        } else {
            gestorTPN.actualizar(idAfiliado, etpn);
        }
    }

    public void eliminar(EntidadTituloProvisionNacional etpn) throws Exception {
        if (validarEliminacion(etpn)) {
            gestorTPN.eliminacionFisica(etpn);
        } else {
            throw new Exception("Campos para eliminacion auscentes.");
        }
    }

    public boolean existe(int numero) throws Exception {
        if (numero <= 0) {
            throw new Exception("El NUMERO especificado para verificar la existencia no es valido");
        } else {
            return gestorTPN.existe(numero);
        }
    }
    
    private boolean validarInsercion(EntidadTituloProvisionNacional etpn) {
        if (etpn.getNumero() <= 0) {
            return false;
        }
        if (etpn.getIdAfiliado() == null) {
            return false;
        }
        if (etpn.getDescripcion() == null) {
            return false;
        }
        if (etpn.getFecha() == null) {
            return false;
        }
        return true;
    }

    private boolean validarActualizacion(EntidadTituloProvisionNacional etpn) {
        if (etpn.getNumero() <= 0) {
            return false;
        }
        if (etpn.getIdAfiliado() == null) {
            return false;
        }
        if (etpn.getDescripcion() == null) {
            return false;
        }
        if (etpn.getFecha() == null) {
            return false;
        }
        return true;
    }

    private boolean validarEliminacion(EntidadTituloProvisionNacional etpn) {
        if (etpn.getNumero() <= 0) {
            return false;
        }
        if (etpn.getIdAfiliado() == null) {
            return false;
        }
        return true;
    }

    public DefaultTableModel tabularDatos(ArrayList<Object> lista) {
        DefaultTableModel modelo = new DefaultTableModel();
        modelo.addColumn("Numero");
        modelo.addColumn("Id Afiliado");
        modelo.addColumn("Descripcion");
        modelo.addColumn("Fecha");
        for (int i = 0; i < lista.size(); i++) {
            EntidadTituloProvisionNacional etpn = (EntidadTituloProvisionNacional) lista.get(i);
            Object[] fila = new Object[]{etpn.getNumero(), etpn.getIdAfiliado(), etpn.getDescripcion(), etpn.getFecha()};
            modelo.addRow(fila);
        }
        return modelo;
    }
}
